//package com.ztr.suanfa.ecc;
//
//
//
//import javax.crypto.Cipher;
//import java.security.*;
//
//
//
//public class ECCSF {
//    /**
//     * 生成密钥对
//     *
//     * @param keysize 密钥长度
//     * @return
//     */
//    public static KeyPair generateECCKeyPair(int keysize) {
//        try {
//            // 获取指定算法的密钥对生成器
//            KeyPairGenerator generator = KeyPairGenerator.getInstance(EC_ALGORITHM, EC_PROVIDER);
//            // 初始化密钥对生成器（指定密钥长度, 使用默认的安全随机数源）
//            generator.initialize(keysize);
//            // 随机生成一对密钥（包含公钥和私钥）
//            return generator.generateKeyPair();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * ECC 加密
//     *
//     * @param publicKey 公钥
//     * @param plain     原文
//     * @return　密文
//     */
//    public static byte[] eccEncrypt(PublicKey publicKey, byte[] plain) {
//        try {
//            Cipher cipher = Cipher.getInstance(ECIES_ALGORITHM, EC_PROVIDER);
//            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//            return cipher.doFinal(plain);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * ECC 解密
//     *
//     * @param privateKey 　私钥
//     * @param encrypted  　密文
//     * @return　原文
//     */
//    public static byte[] eccDecrypt(PrivateKey privateKey, byte[] encrypted) {
//        try {
//            Cipher cipher = Cipher.getInstance(ECIES_ALGORITHM, EC_PROVIDER);
//            cipher.init(Cipher.DECRYPT_MODE, privateKey);
//            return cipher.doFinal(encrypted);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 私钥签名
//     *
//     * @param privateKey 私钥
//     * @param plain      原文
//     * @return 签名
//     */
//    public static byte[] eccSign(PrivateKey privateKey, byte[] plain) {
//        try {
//            Signature signature = Signature.getInstance(SIGNATURE);
//            signature.initSign(privateKey);
//            signature.update(plain);
//            return signature.sign();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 公钥验签
//     *
//     * @param publicKey 公钥
//     * @param plain     原文
//     * @param sign      签名
//     * @return
//     */
//    public static boolean eccVerify(PublicKey publicKey, byte[] plain, byte[] sign) {
//        try {
//            Signature signature = Signature.getInstance(SIGNATURE);
//            signature.initVerify(publicKey);
//            signature.update(plain);
//            return signature.verify(sign);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return false;
//    }
//
//
//    public static void main(String[] args) {
//        // 测试文本
//        byte[] plain = "123".getBytes();
//
//        // 生成密钥对
//        KeyPair keyPair = generateECCKeyPair(256);
//        PublicKey publicKey = keyPair.getPublic();
//        PrivateKey privateKey = keyPair.getPrivate();
//
//        // 加解密
//        byte[] encrypt = eccEncrypt(publicKey, plain);
//        byte[] decrypt = eccDecrypt(privateKey, encrypt);
//        System.err.println(new String(decrypt).equals(new String(plain)));
//
//        // 签名验签
//        byte[] sign = eccSign(privateKey, plain);
//        boolean verify = eccVerify(publicKey, plain, sign);
//        System.err.println(verify);
//    }
//
//}
